home *** CD-ROM | disk | FTP | other *** search
/ Aminet 22 / Aminet 22 (1997)(GTI - Schatztruhe)[!][Dec 1997].iso / Aminet / util / blank / BeyondTheDark.lha / BeyondTheDark / Developer / Source / DPMSLibStuff.asm < prev   
Assembly Source File  |  1995-12-07  |  4KB  |  239 lines

  1. ;
  2. ;    Beyond The Dark: Generic DPMS Library Startup Code
  3. ;
  4. ;    (c) Copyright 1995 Matthias Scheler
  5. ;        All Rights Reserved
  6. ;
  7.  
  8.         CSECT text,0
  9.  
  10.         NOLIST
  11.         INCLUDE    "exec/types.i"
  12.         INCLUDE    "exec/libraries.i"
  13.         INCLUDE    "exec/resident.i"
  14.         INCLUDE    "exec/initializers.i"
  15.         INCLUDE    "exec/semaphores.i"
  16.         INCLUDE    "dos/dos.i"
  17.         LIST
  18.  
  19. ;    Macros
  20.  
  21. XLIB:        MACRO
  22.         XREF _LVO\1
  23.         ENDM
  24.  
  25. CALL:        MACRO
  26.         jsr _LVO\1(a6)
  27.         ENDM
  28.  
  29. ;    External References
  30.  
  31.         XREF    _LinkerDB
  32.  
  33.         XREF    _MyDPMSName
  34.         XREF    _MyDPMSID
  35.         XREF    _MyDPMSLibInit
  36.         XREF    _MyDPMSLibFree
  37.  
  38.         XREF    _QueryMyDPMS
  39.         XREF    _SetMyDPMSLevel
  40.  
  41.         XLIB    Remove
  42.         XLIB    FreeMem
  43.         XLIB    CloseLibrary
  44.         XLIB    OpenLibrary
  45.         XLIB    InitSemaphore
  46.         XLIB    ObtainSemaphore
  47.         XLIB    ReleaseSemaphore
  48.  
  49. ;    External Definitions
  50.  
  51.         XDEF    _SysBase
  52.  
  53. ;    Our Library Structure
  54.  
  55.         STRUCTURE BTDBase,LIB_SIZE
  56.         BPTR    BB_SegList
  57.         STRUCT    BB_Semaphore,SS_SIZE
  58.         LABEL    BB_SIZE
  59.  
  60. ;    Program Code
  61.  
  62.         moveq    #-1,d0
  63.         rts
  64.  
  65. ;    Library Resident Module Tag
  66.  
  67. LibResTag:    dc.w    RTC_MATCHWORD
  68.         dc.l    LibResTag
  69.         dc.l    LibResTag+RT_SIZE
  70.         dc.b    RTF_AUTOINIT
  71.         dc.b    VERSION
  72.         dc.b    NT_LIBRARY
  73.         dc.b    0
  74.         dc.l    _MyDPMSName,_MyDPMSID
  75.         dc.l    LibInit
  76.  
  77. ;    Initialization Table for Library Structure
  78.  
  79. LibInit:    dc.l    BB_SIZE
  80.         dc.l    FuncTab
  81.         dc.l    DataTab
  82.         dc.l    Init
  83.  
  84. FuncTab:    dc.l    Open
  85.         dc.l    Close
  86.         dc.l    Expunge
  87.         dc.l    ReturnNull
  88.  
  89.         dc.l    QueryMyDPMS
  90.         dc.l    SetMyDPMSLevel
  91.  
  92.         dc.l    -1
  93.  
  94. DataTab:    INITBYTE LN_TYPE,NT_LIBRARY
  95.                 INITLONG LN_NAME,_MyDPMSName
  96.                 INITBYTE LIB_FLAGS,LIBF_SUMUSED+LIBF_CHANGED
  97.                 INITWORD LIB_VERSION,VERSION
  98.                 INITWORD LIB_REVISION,REVISION
  99.                 INITLONG LIB_IDSTRING,_MyDPMSID
  100.                 dc.l    0
  101.  
  102. ;    Init Function
  103.  
  104. Init:        movem.l    a4/a5,-(sp)
  105.         lea    _LinkerDB,a4
  106.  
  107.         move.l    d0,a5
  108.         move.l    a0,BB_SegList(a5)
  109.         move.l    a6,_SysBase(a4)
  110.  
  111.         lea    BB_Semaphore(a5),a0
  112.         CALL    InitSemaphore
  113.  
  114.         move.l    a5,d0
  115.         movem.l    (sp)+,a4/a5
  116.         rts
  117.  
  118. ;    Open Function
  119.  
  120. Open:        movem.l    d2/a4-a6,-(sp)
  121.         lea    _LinkerDB,a4
  122.         move.l    a6,d2
  123.         move.l    a6,a5
  124.         move.l    _SysBase(a4),a6
  125.  
  126.         lea    BB_Semaphore(a5),a0
  127.         CALL    ObtainSemaphore
  128.  
  129.         addq.w    #1,LIB_OPENCNT(a5)
  130.         bclr    #LIBB_DELEXP,LIB_FLAGS(a5)
  131.  
  132.         cmp.w    #1,LIB_OPENCNT(a5)
  133.         bne.s    InitDone
  134.  
  135.         jsr    _MyDPMSLibInit
  136.         tst.l    d0
  137.         bne.s    InitDone
  138.  
  139.         subq.w    #1,LIB_OPENCNT(a5)
  140.         moveq    #0,d2
  141.  
  142. InitDone:    lea    BB_Semaphore(a5),a0
  143.         CALL    ReleaseSemaphore
  144.  
  145.         move.l    d2,d0
  146.         movem.l    (sp)+,d2/a4-a6
  147.         rts
  148.  
  149. ;    Close Function
  150.  
  151. Close:        movem.l    a4-a6,-(sp)
  152.         lea    _LinkerDB,a4
  153.         move.l    a6,a5
  154.         move.l    _SysBase(a4),a6
  155.  
  156.         lea    BB_Semaphore(a5),a0
  157.         CALL    ObtainSemaphore
  158.  
  159.         subq.w    #1,LIB_OPENCNT(a5)
  160.         bne.s    KeepLibrary
  161.  
  162.         jsr    _MyDPMSLibFree
  163.  
  164.         btst    #LIBB_DELEXP,LIB_FLAGS(a6)
  165.         bne.s    KeepLibrary
  166.  
  167.         lea    BB_Semaphore(a5),a0
  168.         CALL    ReleaseSemaphore
  169.         movem.l    (sp)+,a4-a6
  170.         bra.s    TimeToGo
  171.  
  172. KeepLibrary:    lea    BB_Semaphore(a5),a0
  173.         CALL    ReleaseSemaphore
  174.         movem.l    (sp)+,a4-a6
  175.  
  176. ReturnNull:    moveq    #0,d0
  177.         rts
  178.  
  179. ;    Expunge Function
  180.  
  181. Expunge:        tst.w    LIB_OPENCNT(a6)
  182.                 beq.s    TimeToGo
  183.  
  184.                 bset    #LIBB_DELEXP,LIB_FLAGS(a6)
  185.                 bra.s    ReturnNull
  186.  
  187. TimeToGo:    movem.l d2/a4-a6,-(sp)
  188.         lea    _LinkerDB,a4
  189.         move.l    BB_SegList(a6),d2
  190.  
  191.         move.l    a6,a5
  192.         move.l    a5,a1
  193.         move.l    _SysBase(a4),a6
  194.         CALL    Remove
  195.  
  196.         move.l    a5,a1
  197.         moveq    #0,d0
  198.         move.w    LIB_NEGSIZE(a5),d0
  199.         sub.w    d0,a1
  200.         add.w    LIB_POSSIZE(a5),d0
  201.         CALL    FreeMem
  202.  
  203.         move.l    d2,d0
  204.         movem.l    (sp)+,d2/a4-a6
  205.         rts
  206.  
  207. ;    own Library functions
  208.  
  209. ;    return DPMSInfo
  210.  
  211. QueryMyDPMS:    move.l    a4,-(sp)
  212.         lea    _LinkerDB,a4
  213.  
  214.         jsr    _QueryMyDPMS
  215.  
  216.         move.l    (sp)+,a4
  217.         rts
  218.  
  219. ;    set DPMS level
  220.  
  221. SetMyDPMSLevel:    move.l    a4,-(sp)
  222.         lea    _LinkerDB,a4
  223.  
  224.         move.l    d0,-(sp)
  225.         move.l    a0,-(sp)
  226.         jsr    _SetMyDPMSLevel
  227.         addq.w    #8,sp
  228.  
  229.         move.l    (sp)+,a4
  230.         rts
  231.  
  232. ;    Data
  233.  
  234.         CSECT data,1
  235.  
  236. _SysBase:    dc.l    0
  237.  
  238.         END
  239.